An image prepared for rendering on an electronic device is represented by a set of pixels that each describes a small portion of the image in terms of digital values that represent the colorants available to the rendering device. For example, in an image prepared for display on a video monitor, each pixel typically describes the intensity of the red (R), green (G) and blue (B) components of light that are illuminated to reproduce the color at the associated region of the screen. Similarly, in an image prepared for rendering on a printing device operating in a CMYK color space, each pixel describes the amount of cyan (C), magenta (M), yellow (Y) and black (K) colorants to applied to the print medium in order to reproduce the color at the associated region of the rendered image.
In an 8-bit system, the pixel value for each colorant can range from 0 to 255, with 255 representing the maximum or fully saturated amount of colorant. For an RGB color space, for example, fully saturated red is represented by the pixel value R=255, G=0, B=0 and ideally, a printer operating in a CMYK color space, for example, would reproduce the fully saturated red in response to the pixel value C=0, M=255, Y=255, K=0. In other words, the magenta and yellow colorants, when combined through simple subtractive mixing, would be perceived as red.
However, the spectral properties of the red phosphor used in the video monitor typically differ from those of the subtractively mixed magenta and yellow colorants of a particular printer. As a result, the visual appearance of the red described in RGB space and displayed on the video monitor will usually not match that of the red described in CMYK space and printed on a page. Further, even when rendered on different devices of the same type (e.g., two CMYK printers), the colors reproduced in response to the same color value (e.g., CMYK) will often differ in visual appearance. Accordingly, color transformations are typically required when color matching between two rendering devices is required. In the example described above, the saturated red pixel with RGB color value 255, 0, 0 may be mapped to a CMYK printer pixel that represents, for example, magenta and/or yellow that is less than fully saturated and also calls for a small cyan component, e.g., C=27, M=247, Y=255, K=0.
Color transformations are often complex, multidimensional functions that correct for the nonlinear behavior of both digital color devices and the human visual system, which would require a significant amount of memory in order to process large images in real-time. To reduce the computational cost, these functions are typically implemented as multidimensional lookup tables. A look-up table is essentially a rectangular grid that spans the input color space of the transform. Output values corresponding to each node, i.e., intersection point, of the grid are pre-computed and stored in the look-up table. Input colors are processed through the look-up table by i) retrieving the cell to which the input color belongs, and ii) performing an interpolation among a subset of the surrounding cell vertices to compute the output color value.
The size of a look-up-table is typically limited by the amount of available processor RAM and cache memory. Accordingly, look-up tables are built with an input node sampling that is as sparse as is practical under the circumstances. For example, while a 24-bit RGB vector would be capable of describing over 16 million colors, it would not be unusual for the corresponding RGB-to-CMYK look-up table to be partitioned into 16×16×16 table locations or nodes, with one CMYK value stored at each node. CMYK values of points not directly represented by nodes are then determined by interpolation among nodes or some other suitable calculation and thus, the issue of “node placement” becomes very important.
In spite of this significance, however, input nodes are typically positioned on a uniformly spaced lattice and even. In cases where the nodes are adapted to lie on a non-uniform lattice, node locations are usually selected based on the curvature of the function that describes the multi-dimensional transform. Simple mathematical operators such as the second derivative can be used to yield a measure of curvature. However, even in those scenarios, the distribution or relative importance of the values of the input values is usually ignored, which often leads to poor node placement and consequently, to inaccurate transforms.
Techniques for “truly optimal” node placement are search based and hence very intensive in computation. That is, the identification of truly optimal locations of a lattice for the placement of the nodes of a multi-dimensional look-up table would entail a search on all candidate nodes to eliminate as many locations as possible for optimal memory/cost reduction while maintaining the accuracy of the required color transformations. Since the set of candidate nodes in general is very large, particularly for high-dimensional inputs, a search of every node would also be very expensive and thus, is an impractical solution.